LaserMatrix is a GEOS printer driver that graphically enhances any GEOS information passed through it. It works with any GEOS app- lication that uses the printer and handles text and graphics.
@Background
I first thought of LaserMatrix when watching what the MacIntosh Laser Printer did to Mac graphics... somehow it 'smoothed' the screen image and made a much better printout than was displayed on the screen. When GeoWrite 2.0 came out with a print selection of "Draft/High/NLQ", I assumed that Berkeley SoftWorks had taken this into account by offering various print enhancement qualities. No such luck! I then thought that maybe the newer printer drivers included on the disk did just that; again, no luck. When I found out about Berkeley/Compute Gazette's GEOS programming contest, I thought I should take a crack at it, and at the same time get my long-awaited enhanced printout.
The only problem with this idea was that I was due to leave the country for a few months on business and had only a few weeks to write it. As a further burden, I realized just before leaving that if the folks at Berkeley didn't have a Star SG-10 printer, they would have a tough time getting my driver to work! This prompted a VERY quick write of the LaserMatrix Editor to allow them to configure the program to their printer. Both programs were mailed into the contest on my way to the airport! (Seriously!)
@Apologies
Well, I really didn't expect to see LaserMatrix distributed publicly, nor did I expect the great response that it's gotten. I wish now that I had spent a little more time on documentation and testing. My big "sorry" goes out to the folks with printer widths other than 80 card widths. I didn't test this and let a very stupid bug into the program; V2.0 fixes this. A smaller "sorry" goes to people with printers other than the Star SG-10 who aren't sure what printer codes to use. The only other printer I had access to when testing was another SG-10, and I wasn't a printer escape code expert, so I couldn't have provided this information. Besides, LaserMatrix was primarily a contest entry!
@Printer Driver Technical Stuff-
NOTE: Your printer's technical manual contains the infor- mation required by the LaserMatrix Editor to configure the driver to your printer. You should be reasonably familiar with how printer escape codes work and the capabilities of your printer in order to use the LaserMatrix Editor.
GEOS works with a printable image that is
@cards
wide, where a
@card
is simply an 8-pixel by 8-pixel screen area. This image, on the screen, has a density close to
pixels (dots) per inch.
@Note that the density and the width are two different things.
Different printers can have various widths and various densities, and most printers support more than one density. This is the opportunity that LaserMatrix takes advantage of... The SG-10, for example, has a high density printing mode capable of
dots per inch! For comparison, a MacIntosh laser printer has a density of
dots per inch.
To make sure that the printout has the same proportions as the image on the screen, we should also adhere to the
@80 DPI
(dots per inch) GEOS screen density for printing.
To make sure that the printout has the same proportions as the image on the screen, we should also adhere to the
@80 DPI
(dots per inch) GEOS screen density for printing. For example, simply printing the image using 240 DPI would make the image 2/3 smaller!
Since we can't squeeze the screen image into tighter densities to get better results, we need to fill in those extra dots with something. GEOS doesn't have any more information to give us, just 80 dots every inch. Or maybe there
more...
LaserMatrix uses a technique called
@interpolation
to determine what data SHOULD probably have been there if the GEOS image had been more dense. For example, if the GEOS image is a horizontal line one inch wide, it sends the printer driver 80 dots in a row. If we wanted to print this image in a higher density such as 160 DPI, we would need
@80 more dots
for that one inch of printout. GEOS can't give them to us, but we can assume that these 'other' 80 dots should be in a straight line also. Thus, LaserMatrix 'fills in' the 'missing' data as follows:
When printed, the output is a much better looking horizontal line:
Although this simple method is fine for horizontal lines, GEOS text and graphics rarely consist of just horizontal lines. LaserMatrix has other routines to handle graphic interpolation containing other types of lines and shapes. Additionally, since LaserMatrix works on GRAPHIC images, it doesn't matter whether you're printing GeoPaint images or GeoWrite text; it's all handled the same.
Now, to return to printer density selection. LaserMatrix can output a
@multiple
of the number of dots sent out by GEOS. For simplicity (and because of the standard printer densities available), LaserMatrix outputs either
times the number of dots GEOS sends out. Thus, the
@HIGH DENSITY SELECTION
is chosen as the highest density that is closest to a multiple of the normal (GEOS 80 DPI) density. The Star SG-10 has the following density options:
@ 120
@ 240
DPI.
DPI is chosen since it is an even multiple of
times
DPI.
@What if your printer doesn't have an even multiple of 80 DPI density?
If so, you're in the same situation as not having an 80 DPI mode with a normal printer driver- your printed page will not have the same height & width ratio that your screen image does. Printing at 60 DPI will make the printout wider in aspect than the displayed image. Printing at 90 DPI will appear to shrink the printout width. The goal is to select a high density that is as close as possible to a multiple of 80 DPI. For example, if your printer has 72 & 144 DPI modes, choose 144 DPI, and a MULTIPLE of 2. This will give the same size results as normal printing in 72 DPI mode- a slightly wider printout. Come as close to
DPI as possible.
@IMPORTANT NOTE:
Some printers such as the NX-1000 and LX-80 have high density (240 DPI) modes available, but only print
@every other dot
sent to the printer (horizontally). This is because the printhead pins cannot retract and refire repeatedly more than 120 times while the head moves over 1 inch of paper at that speed. The density remains at 240 DPI, but half of the dots are actually printed.
This
@may not
affect the LaserMatrix printout. LaserMatrix sends out enough dots in two passes that this 'dot skipping' may not be noticed at all. This depends also upon the content of the printout- densely packed graphic areas could appear lighter or thinned out.
Two choices are available;
a) Use the
@240 DPI
mode which will skip dots as mentioned, if the output is acceptable, - or -
b) Use the normal speed
@120 DPI
mode which does NOT skip dots, but will make the printout appear slightly wider than the screen image, if this is acceptable. (Some printers also
have a fast 120 DPI mode, but this also skips every other
dot)
Again, depending on the content of the image, it may be worthwhile to set up BOTH methods as seperate drivers and select the one that is best for a given printout. Read your printer's manual closely to determine if your high density graphics printing mode utilizes this 'dot skipping' approach.
@Now you must determine your printer's WIDTH.
GEOS will output a
@maximum
dots horizontally. LaserMatrix then doubles or triples this number to
@1280
@1920
dots
@maximum
. The printer's width limitation will be either:
a) The printer's physical carriage width and density, -or-
b) The maximum number of dots it can print across
the page
First, check the bit-map graphics capabilities of the printer. GEOS needs to know the printing width in 8-dot 'cards'. GEOS app- lications will send out the data in multiples of 8 dots, a width of
cards allowing the full width of
(80 x 8) dots that GEOS is capable of.
Some printers have a limitation on the number of dots that can be printed on a single line in high density modes. If your printer has no limitation or none can be found in the manual, use the maximum physical printing width of the carriage (usually 8 inches) multiplied by the high density selection in dots/inch. The maximum number of dots per line is the
@smaller
of these two numbers.
To compute your printer's width, do the following:
a) Find the number of dots the printer can print on a
line at the selected high density (described above),
b) Divide by the density MULTIPLE (2 or 3) being used,
c) Divide by 8 and round down to the nearest whole number
If this number is
@greater than or equal to 80
, then the printer width is
, otherwise this computed number is the maximum width and you'll have to endure a slightly smaller page. Most GEOS applications have generous right and left margins, so a smaller page lets GEOS know that it should reduce the margins and most documents will still print OK.
For example:
Printer XYZ can print
@1200
bit-map graphics dots across an 8-inch page. The high density mode is
dots per in
For example:
Printer XYZ can print
@1200
bit-map graphics dots across an 8-inch page. The high density mode is
dots per inch, a multiple of
times 80 DPI. (
in.) x (
dots/in.) =
@1280
, so the dot limitation is the smaller number,
@1200
@1200
divided by
divided by
. Thus, printer XYZ has a GEOS width of
cards.
Printer ABC can print
@1600
dots across an 8-inch page. The high density mode is
DPI, using a multiple of
(x 72 DPI). (
in.) x (
dots/in.) =
@1728
, so
@1600
is the limitation. 1600 divided by
is 533.333. Divided then by 8 gives 66.666, which, rounded down, is a width of 66 cards. A better choice here is to use a high density of
DPI (if available), with a multiple of
@144)
@1152
dots, which becomes the limitation. 1152/
= 576, and 576/8 =
cards, which is closer to the maximum width of 80 cards.
Printer PDQ handles thermal paper no greater than
inches wide. No dot limitation is listed. The high density mode is
DPI, a multiple of
in.) x (
DPI) =
dots. 720/
= 360, and 360/8 =
cards.
The SG-10 has no limit listed. Using
DPI, a multiple of
, the dot limit is: (
in.) x (
DPI) =
@1920
, 1920/
= 640, 640/8 =
cards.
If the output does not appear as expected, check your manual again closely to ensure that there is not a limit on the number of dots printed. Also, if your printer does not handle at least an 8-1/2 inch sheet or only low or "non-standard" densities are available, check the graphics printing information closely for the specific details mentioned above.
@To compute the page HEIGHT
, you need to know the actual size of the paper you will use. A non-perforated roll can be any length (within some limits, one would guess), but single-sheet and fanfold perforated paper should be measured. Normal sheets are 11 inches long. GeoPublish, for example, uses a 10.5 inch high page image. If your printer has automatic top and bottom margins, or if you intend to set printer vertical margins (not in the GEOS application, but in the printer or driver itself) you should subtract these from the initial page length. For example, if using an 11 inch page, programming automatic 1/2 inch top & bottom margins in the printer results in a 10 inch high page, as GEOS sees it. Also take into account where on the paper you start the printout- some people line up the printhead with the paper edge prior to printing, others start about 1/2 inch down the page.
Printer page height is represented in
@8-pixel cards
, just as in width. The number of dots per inch vertically, however, is
@fixed
by the pin spacing in the dot matrix print-head. LaserMatrix sends out a fixed multiple of
times this vertical density.
To compute page height (in cards), do the following:
a) Determine the height of the physical page being used
b) Subtract any top and bottom margins to be used
c) Multiply by the standard vertical density in DPI
d) Divide by 8 and round down to the nearest whole number
For example, the STAR SG-10 has a normal vertical density of 72 DPI, with a printhead height of 8/72 inches.
@NOTE: This bit of information is CRITICAL and may not be explicit in your manual. READ the details, fine print, and coding examples to obtain this number!
So, for a 10.5-inch page (as GeoPublish uses):
10.5 in. x 72 DPI / 8 = 94.5, or a height of
cards
Note that if you
So, for a 10.5-inch page (as GeoPublish uses):
10.5 in. x 72 DPI / 8 = 94.5, or a height of
cards
Note that if you opt for large margins or if other factors affect the page height, your page may be too short for a given application. GeoWrite will continue printing text on the next page, but GeoPublish will stop when it reaches the end of the page as you've defined it.
We now have the primary information that LaserMatrix needs; the page
@height
@width
, and printing
@density
@ASCII PRINTING
Besides printing GEOS fonts and graphics, the LaserMatrix printer driver also supports ASCII draft and Near-Letter-Quality (NLQ) printing modes. These modes ignore GEOS fonts and bit-mapped images and print
@only the text
on a page in your printer's internal fonts. These modes are faster since the LaserMatrix graphics interpolation does not need to occur. Draft mode is good to get a quick printout for proofreading or editing and will be printed in your printer's normal dot-matrix font. GeoWrite (when using the 'Com- modore' font) and GeoCalc also support NLQ printing which is similar, but uses the printer's better NLQ font (on printers with this option).
@ESCAPE CODES (aargh!)
These are not as difficult as rumor would have it. An escape code is simply a byte (character) sent to the printer that is an
@instruction
, not a letter or number to actually be printed. They are called 'escape' codes because they are traditionally a series of codes preceded by an ASCII '
@ESCAPE
' character (#27). The escape character tells the printer that the next few characters coming in should be grouped together to form a printer instruction instead of being printed.
Each printer manufacturer has an idea of the 'best' way to communicate with a printer. GEOS only sends text & graphics out in ONE manner; it is the printer driver's responsibility to see that the GEOS application's request is translated to the correct printer instructions to get the job done - for that particular printer. This is why there are so MANY different GEOS printer drivers. Before printing, for example, a GEOS application tells the driver to reset the printer. The driver simply responds by sending out a pre-defined set of escape codes to the printer, instructing it to reset, and then reports to GEOS that the job was done.
The printer's manual contains a description of each escape code it can understand, along with a description of the format of the code and any additional information that needs to be sent.
@LaserMatrix Editor
This GEOS application is used to tailor a LaserMatrix driver to your printer. It reads
existing LaserMatrix (V2.0) driver from the disk and makes a copy in memory (leaving the original driver untouched). The program will then ask for the escape codes required to get
@your
printer to execute the various LaserMatrix routines. When finished, the new driver is written to the disk, ready to use.
Each edit page displayed by the LaserMatrix Editor has up to 3 icons at the bottom:
@PREVIOUS
@NEXT
, and
@QUIT
. 'PREVIOUS' backs the editor up to the previous page to allow you to change a parameter. You may back up from the last page all the way to the first, if desired. 'NEXT' is the opposite of PREVIOUS, except that you may not move forward past a page that
@requires
printer information until you have entered the required data. 'QUIT' will exit the editor at any time, without saving the new LaserMatrix driver.
The following paragraphs are explanations of the data required on each editor page.
@A) New LaserMatrix Driver Name
The new driver to be created must
The following paragraphs are explanations of the data required on each editor page.
@A) New LaserMatrix Driver Name
The new driver to be created must have a unique name, different from the driver to be read in as a template.
@B) Page Width
The printer width in cards, as explained in the paragraphs above, must be entered here. Two default selections of
and
cards are available.
@C) Page Height
The page height in cards, computed above, is entered here. A default selection of
cards is also available.
@D) Mode Selection
If ASCII Draft and/or NLQ printing capabilities are desired for the new driver, the
@Graphics/ASCII
icon should be selected. Other- wise, select the
@Graphics Only
icon. ASCII printing parameters will be needed only if the ASCII printing functions are selected here.
@E) Density Multiple
The printing density multiple (
), computed above, is entered here. Select
@Double
for 2 or
@Triple
for 3.
@F) Printer Initialization Escape Code Sequence
This is the code sequence needed to reset your printer to a default 'just powered up' condition. The following options
@must
be initialized by the Reset codes:
- Clear any non-needed modes (margins, italics, tabs, etc.)
- Set the default line-feed amount (explained below)
Any of the following options, if desired and available on your printer, can also be initialized by the Reset codes:
- New margins (horizontal and vertical)
- New page length (for skipping perforations)
- Any codes needed to initialize your printer's interface
Most printer interfaces should be set to a
@transparent
mode so that printer escape codes sent by the LaserMatrix driver are not trapped and interpreted by the interface. Check your interface's manual for more information. If your printer must first be set to emulate another printer, the codes to do this should be the FIRST codes in the reset sequence.
@default line-feed amount
mentioned above is the amount of paper feed necessary to place the
printhead dot directly under the
@last
printed dot on the previous line:
With the default line-feed set equal to the printhead height,
@continu
With the default line-feed set equal to the printhead height,
@continuous
vertical scans of the GEOS graphics image are formed.
Another necessary parameter is the
@SMALLEST
line-feed amount possible on your printer. This is used to shift the paper up enough to allow the printhead to print dots between previously printed dots. As an example, these values for the STAR SG-10 (in STAR mode) are:
Line-feed for continuous print:
@8/72
" (the printhead height)
Smallest line-feed possible:
@1/144
This smallest line-feed is printed after the first printing pass of the two-pass process. Because of this, the amount of paper that must subsequently be fed to get to the next output line is the previously computed default line-feed
@MINUS
the smallest line-feed already printed. The
'default' line-feed amount for the Star SG-10 now becomes:
8/72" - 1/144" =
@15/144
(8/72" = 16/144")
The SG-10 escape code sequence for telling the printer the new default line-feed is defined in
@multiples
of the smallest amount (in 1/144 inch increments) as is true for most printers- the sequence sets the amount to
@n/144
inches, where you specify '
'. Using the information above, check your manual for your printer's line-feed capabilities. Some printers offer a 1/216 inch line-feed which is also acceptable. Changing the default line-feed is
@REQUIRED
to get proper LaserMatrix output.
The LaserMatrix Editor will prompt you for the escape code sequence to initialize your printer. These codes should be entered in
@DECIMAL
(double-check the number format given in your printer manual !) and must be separated by
@commas
. Remember, the decimal code for the ESCAPE character is 27. Also, some manuals specify ASCII characters as escape code sequence parameters- use the
@decimal equivalent
for these characters. Using the SG-10 again as an example:
Printer Reset:
@27, 64
(ESCAPE, "@")
Set default line-feed to 15/144":
@27, 51, 15
(ESCAPE, "3", 15)
Some important RULES governing escape codes:
@Always
use
@decimal
numbers
2) If an
@ASCII character
is to be sent, enter its
@decimal equivalent
("@" = 64, "A" = 65, etc.)
3) If a
@number
is given, double-check to see if it
is an
@ASCII character
or a
@decimal number
character "0" is decimal
, number 0 is
@ESCAPE,
" is
@NOT
the same as
@ESCAPE,3
4) The
@ESCAPE
character is decimal
5) Separate entries with
@commas
6) Double-check the wording in the manual-
@SETTING
a line-feed is
the same command
as
@SENDING
a line-feed!
7) Press
@RETURN
after entering a sequence. Do not
use the '
@NEXT
' icon until after pressing RETURN
when initially entering an escape code sequence.
The SG-10 initialization sequence is then entered as:
@27, 64, 27, 51, 15
[return]
G) Printer Graphics Output Escape Code Sequence
This is probably the most confusing part of the LaserMatrix Editor, but is the escape sequence that does the most "work".
Using the density information computed previously, we must calculate the number of actual dots across the page that the printer should expect to see. This is done using the following equation:
# dots = Printer width in cards x 8 x Density MULTIPLE (2 or 3)
For example, printer XYZ has a
-card width, and a selected multiple of
(160 DPI =
DPI). The number of dots is:
@1,200
dots across.
The Star SG-10 has an
-card width, and uses 240 DPI, a multiple of
. This works out to:
@ 1,920
dots across.
As a further headache, this number must be broken down into a high-byte/low-byte sequence for the STAR and for most, if not all, other printers. This simply means sending two numbers to the printer,
and
, computed using:
@ dots
@ 256
@ N2
where:
= Whole (integer) part of #
@dots/256
, (high byte)
and:
@dots
) (low byte)
For the SG-10, using
@1920
dots across:
= INT(
@1920
/256 ) = INT( 7.5 ) =
@1920
- (256 x
@1920
- 1792 =
Thus, the
@low-byte
, and the
@high-byte
. The printer can take these two numbers and "re-construct" the original number,
@1920
. The SG-10 expects to have the low-byte sent first, although some printers may be opposite. The remainder of this sequence is the code string to set the printer to the selected density. For the SG-10, the sequence is: ESCAPE, "g", followed by a number representing the density; in this case
DPI, which is density selection number 3 in the SG-10's list of available densities. This string is then followed by the dot count in low-byte/high-byte format. Put together:
ESCAPE, "g", 3, 128, 7 -or-
@27, 103, 3, 128, 7
Your manual may show that your printer uses a slightly different format. The only requirement that LaserMatrix has is that this escape code sequence must do whatever is necessary to enable the printer to receive the graphics dots
@immediately after
sending out the escape codes. Printers that require codes or printer instructions within dot streams will not be compatible with LaserMatrix. Most (if not all) Epson-compatible or Epson-similar printers support this type of graphics printing, however, so there shouldn't be any problems.
@H) Send Half-dot Line-feed Escape Code Sequence
The "smallest possible" line-feed found earlier is sent to the printer between print passes. This escape code sequence must
@SEND
a single, small line-feed command to the printer. Note that this is different than
@SETTING
the default line-feed. For the STAR SG-10, this command is of the form:
@ESCAPE,
, where
is the number of 1/144" line-feeds to send; in this case,
. This escape sequence for the SG-10 is then:
@27, 74, 1
This covers
This covers everything necessary for graphics printing for GeoWrite, GeoPaint, GeoPublish, etc. ASCII printing, which uses your printer's ASCII draft and/or Near-Letter-Quality (NLQ) modes is optional, at 80 characters per line and 66 lines per page. The following paragraphs cover ASCII printing. You may omit these parameters from the LaserMatrix driver if ASCII printing is not desired and was not selected on the Graphics/ASCII capability edit page.
@I) Initialize ASCII Mode Escape Code Sequence
This escape sequence is similar to the printer initialization sequence mentioned above, except that the default line-feed should
be set for continuous (touching) print scans, but should instead include some spacing between lines. The SG-10 default is 1/6 inch spacing.
I have found a small quirk, however- since GeoWrite sends out 66 lines per page in ASCII mode, 1/6 inch line spacing results in exactly 11 inches. Thus, if you started at the very top of one sheet, you will be at the top of the next sheet 66 lines later. GeoWrite will then
send a form-feed at the end of each page's text to advance to the top of the next sheet. So, after a full page of text the printer is at the top of a new sheet, but you
@then
get a form-feed which SKIPS one blank page!
To correct this, I suggest setting a default margin that is
@SLIGHTLY
smaller than 1/6 inch. If you are already using a spacing smaller than this, there will be no problem. For the SG-10, I use 1/6 inch minus the smallest amount (1/144 inch), resulting in a 23/144" line-feed. The ASCII printer initialization escape sequence is then:
ESCAPE, "@" (reset), ESCAPE, "3", 23 -or-
@27, 64, 27, 51, 23
Any other ASCII printing options can be added:
- ASCII internal font selections (Italics, etc.)
- Character spacing (Elite, Pica, condensed, etc.)
- Effects such as expanded characters, boldface, etc.
To use these effects, simply append the escape code sequence to the initialization codes above. Note that the selected options will remain in effect throughout the ASCII printout.
J) Near-Letter-Quality Printing
The LaserMatrix Editor displays the NLQ option with
icons. If an NLQ mode is available for your printer and is desired, select the
icon and enter the NLQ escape code sequence. This sequence simply instructs the printer to switch to output its NLQ font characters. As above, any additional options can be added by entering the escape code sequence desired. The SG-10 NLQ option is enabled using:
ESCAPE, "B", 4 -or-
@27, 66, 4
@K) Saving the New Driver
After making the selections, the '
@PREVIOUS
' icon can be used to back up and edit or change any entries. Selecting '
@NEXT
' here will place your entries into the LaserMatrix program template in memory, save the new driver to the disk, and exit. '
@QUIT
' will exit the editor without saving the driver.
Remember to use the GEOS DeskTop '
@Select
@Printer
' option to select the newly created driver as the one to use.
With the above information, any printer capable of the indicated functions can be coupled with LaserMatrix to produce extremely high-quality GEOS output.
@LaserMatrix 1, 2, and 3...
LaserMatrix 1.0 is the original contest entry, which had a few bugs. LaserMatrix 2.0 is actual
@LaserMatrix 1, 2, and 3...
LaserMatrix 1.0 is the original contest entry, which had a few bugs. LaserMatrix 2.0 is actually LaserMatrix 1.1, an updated version with the bugs corrected. Strangely, one of the bugs was that the version number needs to be 2.0 or above in order for GeoWrite to access the ASCII printing functions... hence, LaserMatrix 2.0 instead of 1.1.
LaserMatrix 3 is currently in development, but should contain the results of many things learned from LaserMatrix 1 & 2. Although I doubt that it will be faster, it appears that the image can be even
further
enhanced... still moving towards laser-quality!
I hope to also include routines that handle printers with escape sequences different from the Epson-compatibles, 7-bit printers, a real-time printing option selection, and possibly image scaling and color-printer capability.
@ShareWare, Copyrights, etc.
PLEASE don't think that this DOESN'T take a LOT of my time.
@IT DOES
. I spent time researching, developing the printing methods, writing code, and debugging it. Writing this documentation so that more people can use LaserMatrix took quite a few hours. Writing LaserMatrix 1.0 and the LaserMatrix Editor took many more. And the debugging to create LaserMatrix 2.0 took even more.
I've gotten a LOT of positive comments on this software. People are using LaserMatrix on newsletters, club flyers, mailing labels, resumes, and 'Commodore' magazine uses it to publish its monthly GEOS column. If it is worth USING, but not enough to send me a few bucks to pay for it, PLEASE write and tell me why. The published ShareWare fee for the LaserMatrix package (driver and editor) is only $5.00. If you're not going to do weekly newsletters, but maybe use it only now and then, then even 2 or 3 dollars would be greatly appreciated.
I would enjoy writing software such as this and placing it in the public domain if I got even a small reward for my efforts. From the feedback I've gotten, I estimate that well over 1200 copies of LaserMatrix have been distributed. However, I have received LESS THAN $40 in ShareWare donations. Because of this, I (and many other programmers) may be forced into commercial distribution. This additional cost is passed on to YOU, possibly making LaserMatrix 3 cost $15-$25, or even to not be released at all.
If I can say it one more time...
@PLEASE
understand that I DID spend a lot of my personal time on this. If you use my product and are satisfied with the quality of the LaserMatrix output, then
@PLEASE
send me a note telling me that you like it and
@PLEASE
include $5, or whatever you truly believe that this software is worth to you. I always hear people say that "they wouldn't copy software if prices were reasonable". Most ShareWare authors charge $3-$10 for really good programs- you don't get much more "reasonable" than that!
For those people who have supported me and the ShareWare concept...
HTHANK YOU !!
I have enjoyed hearing of the uses that you have found for LaserMatrix. Feel free to write me with any questions, ideas, hints, or suggestions for future improvements.